<?php
/**
 * @Copyright (c) 2011, 新浪网运营部-网络应用开发部
 * All rights reserved.
 * 数据验证基类
 * @author          wangxin <wangxin3@staff.sina.com.cn>
 * @time            2011/3/2 11:48
 * @version         Id: 0.9
*/
class BaseModelValidate {

    private function __construct() {
        return false;
    }

    /**
     *   * 数据验证
     *   * @params stinrg 
     *   * @return void
     */
    static public function check($value, $type, $validate, $length) {
        list($notEmpty, $validate) = explode("_", $validate);
        if (empty($value)) {
            if ($notEmpty) {
                return '不能为空';
            } else {
                return true;
            }
        }
        //按字段类型判断
        switch ($type) {
            case "int":
            case "tinyint":
            case "smallint":
            case "bigint":
                if (!is_numeric($value)) {
                    return '不是一个数字';
                } elseif (strlen($value) > $length) {
                    return '数字超出了范围';
                }
                break;
            case "bool":
                if (!is_array($value, array(true, false))) {
                    return '必须是一个bool型';
                    
                }
                break;
            case "float":
            case "double":
                if (!is_numeric($value)) {
                    return '不是一个数字';
                }
                break;
            case "char":
            case "varchar":
            case "text":
            case "varchar":
                if (strlen($value) > $length) {
                    return '字符串超出了范围';
                }
                break;
            case "datetime":
                if (!preg_match("/\d{1,4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}/", $value)) {
                    return '时间格式应为：2011-03-02 19:01:00';
                }
                break;
            case "date":
                if (!preg_match("/\d{1,4}-\d{1,2}-\d{1,2}/", $value)) {
                    return '日期格式应为：2011-03-02';
                }
                break;
            case "time":
                if (!preg_match("/\d{1,2}:\d{1,2}:\d{1,2}/", $value)) {
                    return '时间格式应为：19:01:00';
                }
                break;
            case "year":
                if (!preg_match("/\d{1,4}/", $value)) {
                    return '年份格式应为：2011';
                }
                break;
        }
        if (empty($validate)) {
            return true;
        } elseif (!method_exists('Validate', 'is'.ucfirst($validate))) {
            return "设置的检测类型“{$validate}”不存在，请联系管理员排查";
        } else {
            //按指定类型判断
            //return forward_static_call(array('Validate', "is".ucfirst($validate)), $value);//5.3之后支持
            return call_user_func('Validate::is'.ucfirst($validate), $value);
        }
    }
    //检测是否为数字
    static protected function isNumber($value) {
    	if (is_numeric($value)) {
    		return true;
    	} else {
    		return '必须为一个数字';
    	}
    }
    
    //检查是否为移动电话
    static protected function isMobile($value) {
    	if ( preg_match("/1\d{10,10}/",$value) ) {
    		return true;
    	} else {
    		return '必须为一个有效的手机号';
    	}
    }
    
    //检查是否为有效年龄
    static protected function isAge($value) {
    	if ( is_numeric($value) && $value >= 0 && $value < 150 ) {
    		return true;
    	} else {
    		return false;
    	}
    }
    
    //检查是否为有效邮政编码
    static protected function isPostcode($value) {
    	if ( is_numeric($value) && strlen($value) == 6) {
    		return true;
    	} else {
    		return false;
    	}
    }
    
    //检查是否为有效网址
    static protected function isUrl($value) {
    	if ( preg_match("//i",$value) ) {
    		return true;
    	} else {
    		return false;
    	}
    }
    
    //检查url是否为有效图片
    static protected function isImage($value) {
    	if ( preg_match("/jpg|gif|png/i",$value) && file_get_contents($value)) {
    		return true;
    	} else {
    		return false;
    	}
    }
    
    //检查url是否为有效资源
    static protected function isResource($value) {
    	if ( preg_match("//i",$value) && file_get_contents($value)) {
    		return true;
    	} else {
    		return false;
    	}
    }
    
    //检查是否为有效日期
    static protected function isDatatime($value) {
    	if ( preg_match("/\d{1,4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}/",$value)) {
    		return true;
    	} else {
    		return false;
    	}
    }
    
    //检查是否为有效年份
    static protected function isYear($value) {
    	if ( is_numeric($value) && $value >= 0 && $value < 9999 ) {
    		return true;
    	} else {
    		return false;
    	}
    }
    
    //检查是否为有效月份
    static protected function isMonth($value) {
    	if ( is_numeric($value) && $value > 0 && $value < 13 ) {
    		return true;
    	} else {
    		return false;
    	}
    }
    
    //检查是否为有效日期
    static protected function isDay($value) {
    	if ( is_numeric($value) && $value > 0 && $value < 32 ) {
    		return true;
    	} else {
    		return false;
    	}
    }
    
    //检查是否为有效身份证
    static protected function isIdcard($value) {
    	if ( preg_match("//i",$value) ) {
    		return true;
    	} else {
    		return false;
    	}
    }
    
    //检查是否为有效邮箱
    static protected function isEmail($value) {
    	if ( preg_match("//i",$value) ) {
    		return true;
    	} else {
    		return false;
    	}
    }
}

